#!/usr/bin/env node

/**
 * 环境配置设置脚本
 * 用于生成不同环境的 .env 文件
 */

const fs = require("fs");
const path = require("path");

// 读取配置模板
const configPath = path.join(__dirname, "..", "env.config.js");
const config = require(configPath);

/**
 * 将配置对象转换为 .env 文件格式
 * @param {Object} configObj - 配置对象
 * @returns {string} - .env 文件内容
 */
function configToEnvString(configObj) {
  return Object.entries(configObj)
    .map(([key, value]) => `${key}=${value}`)
    .join("\n");
}

/**
 * 生成 .env 文件
 * @param {string} env - 环境名称
 * @param {Object} configObj - 配置对象
 */
function generateEnvFile(env, configObj) {
  const envContent = configToEnvString(configObj);
  const fileName = env === "default" ? ".env" : `.env.${env}`;
  const filePath = path.join(__dirname, "..", fileName);

  try {
    fs.writeFileSync(filePath, envContent, "utf8");
    console.log(`✅ 成功生成 ${fileName}`);
  } catch (error) {
    console.error(`❌ 生成 ${fileName} 失败:`, error.message);
  }
}

/**
 * 主函数
 */
function main() {
  const args = process.argv.slice(2);
  const command = args[0];

  console.log("🚀 环境配置设置工具\n");

  switch (command) {
    case "dev":
    case "development":
      generateEnvFile("development", config.development);
      break;

    case "prod":
    case "production":
      generateEnvFile("production", config.production);
      break;

    case "test":
      generateEnvFile("test", config.test);
      break;

    case "all":
      generateEnvFile("development", config.development);
      generateEnvFile("production", config.production);
      generateEnvFile("test", config.test);
      break;

    default:
      console.log("使用方法:");
      console.log("  npm run setup-env:dev     # 生成开发环境配置");
      console.log("  npm run setup-env:prod    # 生成生产环境配置");
      console.log("  npm run setup-env:test    # 生成测试环境配置");
      console.log("  npm run setup-env:all     # 生成所有环境配置");
      console.log("\n可用的环境:");
      console.log("  - development (开发环境)");
      console.log("  - production  (生产环境)");
      console.log("  - test        (测试环境)");
      break;
  }
}

// 运行脚本
main();
